# cmake_minimum_required(VERSION 3.10)
# project(NetworkModule)  # 修改项目名称，表示这是一个模块

# # 设置模块特有输出目录
# set(MODULE_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/module_out_exe)

# # 1. 保留必要的基类文件（排除main.cpp）
# file(GLOB BASE_CPP_FILES "src/base/*.cpp")
# file(GLOB BASE_H_FILES "src/base/*.h")

# # 2. 核心源码设置（排除MAIN_CPP_FILES）
# set(SRC_FILES  
#     ${BASE_CPP_FILES}
#     ${BASE_H_FILES}
# )

# # 3. 设置 JSONCpp 安装路径
# set(JSONCPP_INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/jsoncpp)

# # 4. 编译 JSONCpp 为静态库（关键修正点）
# include(ExternalProject)
# ExternalProject_Add(
#     jsoncpp_project
#     SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/jsoncpp
#     BINARY_DIR ${CMAKE_BINARY_DIR}/jsoncpp-build
#     INSTALL_DIR ${JSONCPP_INSTALL_DIR}
#     CMAKE_ARGS
#         -DCMAKE_INSTALL_PREFIX=${JSONCPP_INSTALL_DIR}
#         -DCMAKE_BUILD_TYPE=Release
#         -DBUILD_STATIC_LIBS=ON    # 强制生成静态库
#         -DBUILD_SHARED_LIBS=OFF   # 禁用动态库
#     BUILD_COMMAND $(MAKE)         # 跨平台编译
#     INSTALL_COMMAND $(MAKE) install
# )

# # 5. 创建导入的静态库目标（解决 UTILITY 冲突）
# add_library(jsoncpp STATIC IMPORTED GLOBAL)
# add_dependencies(jsoncpp jsoncpp_project)  # 确保先编译 JSONCpp

# # 6. 设置库文件和头文件路径
# set_target_properties(jsoncpp PROPERTIES
#     IMPORTED_LOCATION ${JSONCPP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsoncpp${CMAKE_STATIC_LIBRARY_SUFFIX}
#     INTERFACE_INCLUDE_DIRECTORIES ${JSONCPP_INSTALL_DIR}/include
# )

# # 7. 定义核心静态库
# add_library(network_module STATIC ${SRC_FILES})
# target_include_directories(network_module PUBLIC
#     ${CMAKE_CURRENT_SOURCE_DIR}/src
#     ${JSONCPP_INSTALL_DIR}/include
# )
# target_link_libraries(network_module PUBLIC jsoncpp)

# # 8. 配置父项目集成接口
# # 安装规则，允许父项目通过find_package引用
# install(TARGETS network_module
#     ARCHIVE DESTINATION lib
#     LIBRARY DESTINATION lib
#     RUNTIME DESTINATION bin
#     INCLUDES DESTINATION include
# )

# install(DIRECTORY src/base/ DESTINATION include/base
#     FILES_MATCHING PATTERN "*.h"
# )

# # 9. 模块输出设置（可选）
# set_target_properties(network_module PROPERTIES
#     ARCHIVE_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}/lib
#     LIBRARY_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}/lib
#     RUNTIME_OUTPUT_DIRECTORY ${MODULE_OUTPUT_DIR}/bin
# )









# cmake_minimum_required(VERSION 3.10)
# project(BaseModule)  # 修改项目名称，表示这是一个模块

# # 设置C++标准
# set(CMAKE_CXX_STANDARD 17)
# set(CMAKE_CXX_STANDARD_REQUIRED ON)


# ###################################################
# # # 设置jsoncpp模块特有输出目录
# set(JSONCPP_INSTALL_DIR ${PROJECT_SOURCE_DIR}/lib/jsoncpp)

# # 4. 编译 JSONCpp 为静态库（关键修正点）
# include(ExternalProject)
# ExternalProject_Add(
#     jsoncpp_project
#     SOURCE_DIR ${PROJECT_SOURCE_DIR}/third_party/jsoncpp
#     BINARY_DIR ${CMAKE_BINARY_DIR}/jsoncpp-build
#     INSTALL_DIR ${JSONCPP_INSTALL_DIR}
#     CMAKE_ARGS
#         -DCMAKE_INSTALL_PREFIX=${JSONCPP_INSTALL_DIR}
#         -DBUILD_STATIC_LIBS=ON    # 强制生成静态库
#         -DBUILD_SHARED_LIBS=OFF   # 禁用动态库
#     BUILD_COMMAND $(MAKE)         # 跨平台编译
#     INSTALL_COMMAND $(MAKE) install
# )
# # 创建导入的静态库目标（解决 UTILITY 冲突）
# add_library(jsoncpp STATIC IMPORTED GLOBAL)
# add_dependencies(jsoncpp jsoncpp_project)  # 确保先编译 JSONCpp

# # 设置库文件和头文件路径
# set_target_properties(jsoncpp PROPERTIES
#     IMPORTED_LOCATION ${JSONCPP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsoncpp${CMAKE_STATIC_LIBRARY_SUFFIX}
#     INTERFACE_INCLUDE_DIRECTORIES ${JSONCPP_INSTALL_DIR}/include
# )
# #########################################################

# # 1. 保留必要的基类文件（排除main.cpp）
# file(GLOB BASE_CPP_FILES "*.cpp")
# file(GLOB BASE_H_FILES "*.h")

# # 定义库目标，指定源文件（相对路径基于 CMakeLists.txt 所在目录）
# #明确指定构建共享库（SHARED），生成 .so 文件add_library(my_library_network  SHARED${NETWORK_CPP_FILES})
# # 7. 定义核心静态库 ,.cpp文件
# add_library(base_module SHARED
#     ${BASE_CPP_FILES}
#     ${IMPORTED_LOCATION}
# )

# # 导出公共头文件路径（供外部项目使用） .h文件
# target_include_directories(base_module PUBLIC
#     ${CMAKE_CURRENT_SOURCE_DIR}
#     ${INTERFACE_INCLUDE_DIRECTORIES}
# )
# ################################################
# # 6. 从对象库生成静态库和共享库
# add_library(base_module STATIC $<TARGET_OBJECTS:base_module_obj>)
# add_library(my_library_base SHARED $<TARGET_OBJECTS:base_module_obj>)

# # 7. 统一链接依赖（避免符号丢失）
# target_link_libraries(base_module PUBLIC jsoncpp)
# target_link_libraries(my_library_base PUBLIC jsoncpp)






# 子项目CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(BaseModule)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 1. 保留必要的基类文件（排除main.cpp）
file(GLOB BASE_CPP_FILES "*.cpp")
file(GLOB BASE_H_FILES "*.h")

# 2. 核心源码设置
set(SRC_FILES  
    ${BASE_CPP_FILES}
    ${BASE_H_FILES}
)


# 引入jsoncpp（假设通过add_subdirectory引入）
add_subdirectory(
    ../../third_party/jsoncpp
    ${CMAKE_CURRENT_BINARY_DIR}/jsoncpp_build 
)  # 路径需匹配实际jsoncpp源码位置

# 定义子项目的库（如静态库/动态库）
add_library(BaseModule SHARED  ${BASE_CPP_FILES})

# 链接jsoncpp并传递依赖（PUBLIC确保依赖传递给父项目）
target_link_libraries(BaseModule PUBLIC jsoncpp_lib)

# 导出子项目的头文件路径（确保父项目能访问你的头文件）
target_include_directories(BaseModule PUBLIC 
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>  # 子项目的头文件目录
)